﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxGridView;
using Common;
using System.Configuration;
using MasterPage = UsrControls.MasterPage;

public partial class CargarVines : MasterPage
{
    #region OrdenCargueDataTableCache
    private DataTable OrdenCargueDataTableCache
    {
        get
        {
            DataTable objTable = null;
            if (Cache["OrdenCargue.aspx" + Session.SessionID] != null)
                objTable = (DataTable)Cache["OrdenCargue.aspx" + Session.SessionID];
            return objTable;
        }
        set
        {
            if (value != null)
            {
                Cache.Insert("OrdenCargue.aspx" + Session.SessionID, value, null, DateTime.Now.AddMinutes(20), TimeSpan.Zero);
            }
        }
    }
    #endregion

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            BinDatoscargarVinesDisponibles();
        }
        else
        {
            if (OrdenCargueDataTableCache != null)
            {
                ASPxGridViewVines.DataSource = OrdenCargueDataTableCache;
                ASPxGridViewVines.DataBind();
            }



        }

    }

    #region BinDatoscargarVines
    private void BinDatoscargarVinesDisponibles()
    {
        try
        {
            Model.DataClassesAutosolDataContext contexto = new Model.DataClassesAutosolDataContext(ConfigurationManager.AppSettings["Conn"]);
            var datos = from a in contexto.AUT_VINEs
                        from g in
                            (from g in contexto.ADM_USUARIOs where g.USU_ID == a.USU_ID select g).DefaultIfEmpty()

                        where !(from b in contexto.AUT_ORDEN_SALIDA_AUT_VINs select b.AVI_ID).Contains(a.AVI_ID)
                        select new {
                            a.AVI_ID
      ,a.AVI_CLIENTE
      ,a.AVI_ORIGEN
      ,a.AVI_DESTINO
      ,a.AVI_CONCESIONARIO
      ,a.AVI_VIN
      ,a.AVI_NoMOTOR
      ,a.AVI_INVENTARIO
      ,a.AVI_DESCRIPCION
      ,a.AVI_COLOR
      ,a.AVI_ZONA
      ,a.AVI_SOLICITANTE
      ,a.AVI_ALMACEN
      ,a.AVI_TIPO_FACTURACION
      ,a.AVI_NoEQUIPO
      ,a.AVI_ZVSK
      ,a.AVI_KMAT
      ,a.AVI_TIPO
      ,a.AVI_TIPO_UNIDAD
      ,a.AVI_ANO_MDL
      ,a.AVI_PEDIDO
      ,a.AVI_ENTREGA
      ,a.AVI_FACTURA
      ,a.AVI_FCH_FACT
      ,a.AVI_BL
      ,a.AVI_FECHA_DESPACHO_DEALER
      ,a.AVI_DESPACHO
      ,a.AVI_FECHA_RECEPCION_DEALER
      ,a.AVI_NOVEDADES_DESTINO
      ,a.AVI_NOVEDADES_ORIGEN
      ,a.AVI_REPORTE_FACTURA
      ,a.AVI_COMENTARIOS
      ,a.AVI_REPORTADO_EN_DESPACHO
      ,a.AVI_REPORTADO_EN_ENTREGA
      ,a.ACL_ID_DESTINO
      ,a.ACL_ID_ORIGEN
      ,a.AVI_NUMERO_REMESA
      ,a.AVI_NUMERO_TRANSACCION_CARGUE
      ,a.AES_ID
      ,a.AVI_FECHA_CARGUE
      ,a.AVI_PESO
      ,a.AVI_VALOR
      ,a.USU_ID
      ,g.USU_NOMBRE
                        };
            if (datos == null) return;
            ASPxGridViewVines.BeginUpdate();
            ASPxGridViewVines.DataSource = datos;
            ASPxGridViewVines.DataBind();
            ASPxGridViewVines.EndUpdate();
            OrdenCargueDataTableCache = GetDataView(ASPxGridViewVines);
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
        }
    }
    #endregion
    protected void btnImportarVines_Click(object sender, EventArgs e)
    {

    }

    #region GetDataView
    private DataTable GetDataView(ASPxGridView grid)
    {
        DataTable dt = new DataTable();
        foreach (GridViewColumn col in grid.VisibleColumns)
        {
            GridViewDataColumn dataColumn = col as GridViewDataColumn;
            if (dataColumn == null) continue;
            dt.Columns.Add(dataColumn.FieldName);
        }
        for (int i = 0; i < grid.VisibleRowCount; i++)
        {
            DataRow row = dt.Rows.Add();
            foreach (DataColumn col in dt.Columns)
                row[col.ColumnName] = grid.GetRowValues(i, col.ColumnName);
        }
        return dt;
    }
    #endregion

    protected void btnAsociarVines_Click(object sender, EventArgs e)
    {

    }
    protected void btnImportarVinesCarga_Click(object sender, EventArgs e)
    {
        if (fuImportar.HasFile)
        {
            //BussinesRulesPresupuesto.ModificadoresPreciosVenta objModificadoresPreciosVenta = new BussinesRulesPresupuesto.ModificadoresPreciosVenta(ConfigurationManager.AppSettings["Conn"]);
            int intContador = 0;
            try
            {
                DataSet objDataSet = ExcelImport.ImportExcelXLS(fuImportar.PostedFile, true);
                if (objDataSet.Tables[0].Rows.Count > 0)
                {



                    Model.DataClassesAutosolDataContext contexto = new Model.DataClassesAutosolDataContext(ConfigurationManager.AppSettings["Conn"]);


                    //CONSULTA SI EXISTE EL VIN NO LO CARGA Y LO ANEXA A UN MENSAJE




                    foreach (DataRow objRowExcel in objDataSet.Tables[0].Rows)
                    {
                        string strVinExiste = "";
                        var datosVin = from h in contexto.AUT_VINEs
                                       where
                                       h.AVI_VIN == objRowExcel["VIN"].ToString()
                                       select h;
                        foreach (var v in datosVin)
                        {
                            strVinExiste = v.AVI_VIN;
                        }
                        if (strVinExiste == "")
                        {
                            intContador++;
                            Model.AUT_VINE objAUT_VINE = new Model.AUT_VINE();
                            objAUT_VINE.AVI_CLIENTE = objRowExcel["CLIENTE"].ToString();
                            objAUT_VINE.AVI_ORIGEN = objRowExcel["ORIGEN"].ToString();
                            objAUT_VINE.AVI_DESTINO = objRowExcel["DESTINO"].ToString();
                            objAUT_VINE.AVI_CONCESIONARIO = objRowExcel["CONCESIONARIO"].ToString();
                            objAUT_VINE.AVI_VIN = objRowExcel["VIN"].ToString();
                            objAUT_VINE.AVI_NoMOTOR = objRowExcel["NoMOTOR"].ToString();
                            objAUT_VINE.AVI_INVENTARIO = objRowExcel["INVENTARIO"].ToString();
                            objAUT_VINE.AVI_DESCRIPCION = objRowExcel["DESCRIPCION"].ToString();
                            objAUT_VINE.AVI_COLOR = objRowExcel["COLOR"].ToString();
                            objAUT_VINE.AVI_ZONA = objRowExcel["ZONA"].ToString();
                            objAUT_VINE.AVI_SOLICITANTE = objRowExcel["SOLICITANTE"].ToString();
                            objAUT_VINE.AVI_ALMACEN = objRowExcel["ALMACEN"].ToString();
                            objAUT_VINE.AVI_TIPO_FACTURACION = objRowExcel["TIPO_FACTURACION"].ToString();
                            objAUT_VINE.AVI_NoEQUIPO = objRowExcel["NoEQUIPO"].ToString();
                            objAUT_VINE.AVI_ZVSK = objRowExcel["ZVSK"].ToString();
                            objAUT_VINE.AVI_KMAT = objRowExcel["KMAT"].ToString();
                            objAUT_VINE.AVI_TIPO = objRowExcel["TIPO"].ToString();
                            objAUT_VINE.AVI_TIPO_UNIDAD = objRowExcel["TIPO_UNIDAD"].ToString();
                            objAUT_VINE.AVI_ANO_MDL = objRowExcel["ANO_MDL"].ToString();
                            objAUT_VINE.AVI_PEDIDO = objRowExcel["PEDIDO"].ToString();
                            objAUT_VINE.AVI_ENTREGA = objRowExcel["ENTREGA"].ToString();
                            objAUT_VINE.AVI_FACTURA = objRowExcel["FACTURA"].ToString();
                            objAUT_VINE.AVI_FCH_FACT = objRowExcel["FCH_FACT"].ToString();
                            objAUT_VINE.AVI_BL = objRowExcel["BL"].ToString();
                            objAUT_VINE.AVI_FECHA_CARGUE = DateTime.Now;
                            if (objRowExcel["PESO"] != null)
                                if (objRowExcel["PESO"].ToString() != "")
                                    objAUT_VINE.AVI_PESO = Convert.ToDecimal(objRowExcel["PESO"].ToString());

                            if (objRowExcel["VALOR"] != null)
                                if (objRowExcel["VALOR"].ToString() != "")
                                    objAUT_VINE.AVI_VALOR = Convert.ToDecimal(objRowExcel["VALOR"].ToString());

                            if (objRowExcel["IdOrigen"] != null)
                                if (objRowExcel["IdOrigen"].ToString() != "")
                                    objAUT_VINE.ACL_ID_ORIGEN = Convert.ToDecimal(objRowExcel["IdOrigen"].ToString());

                            if (objRowExcel["IdDestino"] != null)
                                if (objRowExcel["IdDestino"].ToString() != "")
                                    objAUT_VINE.ACL_ID_DESTINO = Convert.ToDecimal(objRowExcel["IdDestino"].ToString());
                            objAUT_VINE.USU_ID = Usuario.UsuId;
                            contexto.AUT_VINEs.InsertOnSubmit(objAUT_VINE);
                            contexto.SubmitChanges();
                        }
                        else
                        {
                            if (lblVinesYaCargados.Text == "")
                                lblVinesYaCargados.Text = strVinExiste;
                            else
                                lblVinesYaCargados.Text = lblVinesYaCargados.Text + "," + strVinExiste;
                        }
                    }




                    if (lblVinesYaCargados.Text != "")
                        msgBox1.alert("Vines no Cargados" + ":" + lblVinesYaCargados.Text);

                    msgBox1.alert("Vines Cargados: " + intContador.ToString());

                    BinDatoscargarVinesDisponibles();
                }
            }
            catch (Exception ex)
            {
                msgBox1.alert("Error: " + ex.Message);

            }
        }
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        List<object> keyValues = ASPxGridViewVines.GetSelectedFieldValues("AVI_ID");
        try
        {
            foreach (object key in keyValues)
            {
                Model.DataClassesAutosolDataContext contexto = new Model.DataClassesAutosolDataContext(ConfigurationManager.AppSettings["Conn"]);


                //liberar los vives asociados
                var datosVinesAsociados = from b in contexto.AUT_VINEs
                                          where b.AVI_ID == Convert.ToDecimal(key.ToString())
                                          select b;
                foreach (var v in datosVinesAsociados)
                {
                    contexto.AUT_VINEs.DeleteOnSubmit(v);
                    contexto.SubmitChanges();
                }
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "msg1_error", "alert('Se eliminaron los registros Exitosamente');", true);
                BinDatoscargarVinesDisponibles();
            }

        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "msg1_error", "alert('" + ex.Message.ToString() + "');", true);
        }
    }
}